/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.reserva;

import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.apresentacao.usuario.InterceptadorCategoriaUsuario;
import byblos.negocio.acomodacao.CategoriaAcomodacao;
import byblos.negocio.reserva.AcomodacaoOnline;
import byblos.persistencia.DAO;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Parameter;

/**
 *
 * @author helena
 */
@Component
@InterceptedBy(value = {InterceptadorIdioma.class, InterceptadorCategoriaUsuario.class})
public class AcomodacaoOnlineSalvarComponent {

    @Parameter(create = true)
    private AcomodacaoOnline acomodacao;
    @Parameter
    private int categoriaId;
    @Parameter
    private Calendar dataInicioIndisponivel;
    @Parameter
    private Calendar dataTerminoIndisponivel;
    @Out
    private String mensagemSucesso;
    @Out
    private String mensagemErro;
    @In
    private HttpServletRequest request;

    public String salvar() {
        try {
            construirAcomodacao();
            System.out.println("indisponibilidades " + acomodacao.getIndisponibilidades());
            boolean adicionouPeriodo = adicionarPeriodo();
            new DAO().salvar(acomodacao);
            mensagemSucesso = "Acomodação salva com sucesso!";
            if (adicionouPeriodo) {
                request.getParameterMap().put("id", "" + acomodacao.getId());
                return "editar";
            } else {
                return "ok";
            }
        } catch (Throwable t) {
            t.printStackTrace();
            mensagemErro = "Erro ao salvar Acomodação!";
            return "invalid";
        }
    }

    private boolean adicionarPeriodo() {
        boolean adicionouPeriodo = false;
        if (dataInicioIndisponivel != null && dataTerminoIndisponivel != null) {
            acomodacao.adicionarPeriodoIndisponivel(dataInicioIndisponivel, dataTerminoIndisponivel);
            adicionouPeriodo = true;
        }
        return adicionouPeriodo;
    }

    private void construirAcomodacao() {
        if (categoriaId > 0) {
            acomodacao.setCategoria(new DAO().localizar(CategoriaAcomodacao.class, categoriaId));
        }
        if (acomodacao.getId() > 0) {
            acomodacao.setIndisponibilidades(new DAO().localizar(AcomodacaoOnline.class, acomodacao.getId()).getIndisponibilidades());
        }
    }
}
